<?php

/**
 * @author Alexia
 * @version 1.0
 */
class ResultatEvaluation
{

    /**
     * @var int
     */
    private $Id;
    /**
     * @var int
     */
    private $IdStage;
    /**
     * @var int
     */
    private $IdQuestion;
    /**
     * @var string
     */
    private $Resultat;

    /**
     * Constructeur
     * @param int $id
     */
    public function __construct($id = 0)
    {
        if (empty($id))
        {
            $this->Id = 0;
            $this->IdQuestion = 0;
            $this->IdStage = 0;
            $this->Resultat = "";

            $this->requeteOk = true;
            $this->errormsg = "";
        }
        else
        {
            $sql = SQL::getInstance()->getConnection();
            //On retourne l'entrée demandée
            $query = 'SELECT * FROM ResultatEvaluation WHERE IdResultatEvaluation = :id';
            $c = $sql->prepare($query);
            $c->bindParam(':id', $id, PDO::PARAM_INT);
            //Exécution de la requête retourne false si echec
            if ($c->execute())
            {
                $result = $c->fetch(PDO::FETCH_OBJ);
                if (!empty($result))
                {
                    //ID
                    $this->Id = $result->IdResultatEvaluation;
                    $this->IdQuestion = $result->IdQuestionEvaluation;
                    $this->IdStage = $result->IdStageEvaluation;
                    //String
                    $this->Resultat = $result->ValeurResultat;

                    $this->requeteOk = true;
                    $this->errormsg = "";
                }
                else
                {
                    $this->requeteOk = false;
                    $this->errormsg = "Ce resultat n'existe pas !";
                }
            }
            else
            {
                //Récupération de l'erreur dans la variable de classe
                /*
                  Pour chaque new avec passage de paramètres vous pouvez savoir si vous avez bien un résultat, si false n'oubliez pas de géréz l'affichage du message,...
                 */
                $this->requeteOk = false;
                $this->errormsg = $c->errorInfo();
            }
        }
    }

    /**
     * Insertion d'un resultat
     */
    public function insertResultatEvaluation()
    {
        $sql = SQL::getInstance()->getConnection();
        $query =
                'INSERT INTO ResultatEvaluation
		(
			 IdQuestionEvaluation,
			 IdStageEvaluation,
			 ValeurResultat
		)
		VALUES
		(
			:idQ,
			:idS,
			:res
		)';
        $sql->beginTransaction();
        try
        {
            $c = $sql->prepare($query);

            $c->bindParam(':idQ', $this->IdQuestion, PDO::PARAM_INT);
            $c->bindParam(':idS', $this->IdStage, PDO::PARAM_INT);

            $c->bindParam(':res', $this->Resultat, PDO::PARAM_STR);

            if ($c->execute())
            {
                $this->Id = $sql->lastInsertId();
                $sql->commit();
                $c->closeCursor();
                $this->requeteOk = true;
                $this->errormsg = "Insertion reussie!";
            }
            else
            {
                $this->requeteOk = false;
                $this->errormsg = $c->errorInfo();
                $sql->rollback();
                $c->closeCursor();
                $this->Id = 0;
            }
        }
        catch (PDOException $Exception)
        {
            $this->requeteOk = false;
            $this->errormsg = $c->errorInfo();
            $sql->rollback();
            $c->closeCursor();
            $this->Id = 0;
        }
    }

    /**
     * Modification d'un resultat
     */
    public function updateResultatEvaluation()
    {
        $sql = SQL::getInstance()->getConnection();
        $query =
                'UPDATE ResultatEvaluation SET
			 IdQuestionEvaluation           = :idQ,
			 IdStageEvaluation              = :idS,
			 ValeurResultatEvaluation       = :res
		WHERE
			IdResultatEvaluation            = :id
		';
        $sql->beginTransaction();
        try
        {
            $c = $sql->prepare($query);

            $c->bindParam(':id', $this->Id, PDO::PARAM_INT);
            $c->bindParam(':idQ', $this->IdQuestion, PDO::PARAM_INT);
            $c->bindParam(':idS', $this->IdStage, PDO::PARAM_INT);

            $c->bindParam(':res', $this->Resultat, PDO::PARAM_STR);

            if ($c->execute())
            {
                $sql->commit();
                $c->closeCursor();
                $this->requeteOk = true;
                $this->errormsg = "Modification reussie!";
            }
            else
            {
                $this->requeteOk = false;
                $this->errormsg = $c->errorInfo();
                $sql->rollback();
                $c->closeCursor();
            }
        }
        catch (PDOException $Exception)
        {
            $this->requeteOk = false;
            $this->errormsg = $c->errorInfo();
            $sql->rollback();
            $c->closeCursor();
        }
    }

    /**
     *
     * @return int
     */
    public function getIdResultatEvaluation()
    {
        return $this->Id;
    }

    /**
     *
     * @return int
     */
    public function getIdStageEvaluation()
    {
        return $this->IdStage;
    }

    /**
     * @param int
     * @return array
     */
    public function setIdStageEvaluation($value)
    {
        //Verif Type + verif Nulle, si bon mis a jour, sinon message erreur
        $errTab = array("boolOk" => true, "errmsg" => "");

        if (isset($value) && $value > 0)
        {
            $this->IdStage = $value;
        }
        else
        {
            if (!isset($value))
            {
                $errTab["boolOk"] = false;
                $errTab["errmsg"] = "L'IdStage ne peut etre null !";
            }
            if (isset($value) && $value <= 0)
            {
                $errTab["boolOk"] = false;
                $errTab["errmsg"] = "L'IdStage ne peut etre <= 0 !";
            }
            else
            {
                $errTab["boolOk"] = false;
                $errTab["errmsg"] = "Cet IdStage n'est pas valide !";
            }

            $this->IdStage = 0;
        }
        return $errTab;
    }

    /**
     *
     * @return int
     */
    public function getIdQuestionEvaluation()
    {
        return $this->IdQuestion;
    }

    /**
     * @param int
     * @return array
     */
    public function setIdQuestionEvaluation($value)
    {
        //Verif Type + verif Nulle, si bon mis a jour, sinon message erreur
        $errTab = array("boolOk" => true, "errmsg" => "");

        if (isset($value) && $value > 0)
        {
            $this->IdQuestion = $value;
        }
        else
        {
            if (!isset($value))
            {
                $errTab["boolOk"] = false;
                $errTab["errmsg"] = "L'IdQuestionEvaluation ne peut etre null !";
            }
            if (isset($value) && $value <= 0)
            {
                $errTab["boolOk"] = false;
                $errTab["errmsg"] = "L'IdQuestionEvaluation ne peut etre <= 0 !";
            }
            else
            {
                $errTab["boolOk"] = false;
                $errTab["errmsg"] = "Cet IdQuestionEvaluation n'est pas valide !";
            }

            $this->IdQuestion = 0;
        }
        return $errTab;
    }

    /**
     * @return string
     */
    public function getValeurResultatEvaluation()
    {
        return $this->Resultat;
    }

    /**
     * @param string
     * @return array
     */
    public function setValeurResultatEvaluation($value)
    {
        //Verif Type + verif Nulle, si bon mis a jour, sinon message erreur
        $errTab = array("boolOk" => true, "errmsg" => "");

        if (isset($value) && $value != "" && strlen($value) <= 255)
        {
            $this->Resultat = htmlentities($value);
        }
        else
        {
            if (!isset($value))
            {
                $errTab["boolOk"] = false;
                $errTab["errmsg"] = "Le resultat ne peut etre null !";
            }
            if (isset($value) && $value == "")
            {
                $errTab["boolOk"] = false;
                $errTab["errmsg"] = "Le resultat ne peut etre vide !";
            }
            if (isset($value) && strlen($value) > 255)
            {
                $errTab["boolOk"] = false;
                $errTab["errmsg"] = "Le resultat ne peut etre aussi long !";
            }
            else
            {
                $errTab["boolOk"] = false;
                $errTab["errmsg"] = "Ce resultat n'est pas valide !";
            }

            $this->Resultat = "";
        }
        return $errTab;
    }

}

?>
